#pragma once

#include "Defines.hpp"

class EventHandlerSimulationNode : public SocketEventHandler
{
public:
	EventHandlerSimulationNode();
	virtual ~EventHandlerSimulationNode();

	virtual void onDisposed();
	virtual void onDisconnected();
	virtual void onConnected();
	virtual void onMessage(Message& msg);

private:
	void onFromNodeJoinTimeLoop(Message& msg);
	void onFromTaskRunningFromAgent(Message& msg);
	void onFromAnyRequestTimeRun(Message& msg);
	void onFromNodeLeaveTimeLoop(Message& msg);
	void onFromNodeTimeStepConfirm(Message& msg);
	void onFromNodeRequestIdRange(Message& msg);
	void onFromNodeSubscribeHotArea(Message& msg);
	void onFromNodeUnsubscribeHotArea(Message& msg);
	void onFromAnyCreateHotArea(Message& msg);
	void onFromAnyUpdateHotArea(Message& msg);
	void onFromAnyDeleteHotArea(Message& msg);
	void onFromAnyAddDeleteTrafficActors(Message& msg);
	void onFromAnyUpdateTrafficActorPositionRotation(Message& msg);
	void onFromAnyUpdateTrafficActorFlags(Message& msg);
	void onFromAnyUpdateTrafficActorCustomProperties(Message& msg);
	void onFromAnyToNodeCommand(Message& msg);
	void onFromAnyToAllCommand(Message& msg);
	void onFromNodeRequestTimerPause(Message& msg);
	void onFromNodeRequestTaskEnd(Message& msg);
	void onFromCustomChannelCreate(Message& msg);
	void onFromCustomChannelSubscribe(Message& msg);
	void onFromCustomChannelSendMessage(Message& msg);

	void onFromServerResultHotAreaCenterActors(Message& msg);


	// allow simulation node to stop the server.
	void onFromConsoleCommand(Message& msg);

private:
	MessageRouter mMessageRouter;
};
